/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Conector;

import Data.Cliente;
import Data.Pesqueiro;
import Data.Funcionario;
import Data.ServicoPesca;
import Data.ServicoPiscina;
import JPaneis.MenuCadastrarCliente;
import JPaneis.MenuCadastrarFuncionario;
import JPaneis.MenuServicoPesca;
import JPaneis.selPessoa;
import java.sql.*;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.Date;
import java.util.LinkedHashMap;

/**
 *
 * @author Leo
 */
public class Conector extends Object{



//        private String uri = "jdbc:mysql://esparta/si2104v";
//	private String database = "si2104v";
//        private String user = "si2104v";
//        private String password = "ljg784";
    private String uri = "jdbc:derby://localhost:1527/pesqueiro";
    private String database = "pesqueiro";
    private String user = "pesca";
    private String password = "pesca";
    private Connection connection = null;
    private PreparedStatement stmt;
    private ResultSet rs;
    private static Cliente retCliente = null;

    public Conector() {

        try {

            Class.forName("org.apache.derby.jdbc.ClientDriver");
//                  Class.forName("org.gjt.mm.mysql.Driver");
            connection = DriverManager.getConnection(uri, user, password);
        } catch (ClassNotFoundException e) {

            e.printStackTrace();

        } catch (SQLException e) {

            e.printStackTrace();
        }

    }

    public boolean consultaApelidoLogIn(String apelido) throws SQLException {

            String sql = "SELECT * from funcionarios where apelido like " + "'" + apelido + "'";
            stmt = connection.prepareStatement(sql);
            rs = stmt.executeQuery();
            if (rs.next()) {
                return true;
            } else {
                return false;
            }
    }

    public boolean consultaSenhaLogIn(String senha) throws SQLException {

            String sql = "SELECT * from funcionarios where senha like " + "'" + senha + "'";
            stmt = connection.prepareStatement(sql);
            rs = stmt.executeQuery();
            if (rs.next()) {
                return true;
            } else {
                return false;
            }
    }

    public boolean consultaCPFCadastrado(String cpf, String tabela) throws SQLException {

        String sql = "SELECT * from " + tabela + " where cpf like " + "'" + cpf + "'";
            stmt = connection.prepareStatement(sql);
            rs = stmt.executeQuery();
            if (rs.next()) {
                return true;
            } else {
                return false;
            }
    }

    public Cliente consultarClienteParaPesca(Cliente c, MenuServicoPesca msp) throws SQLException {

        boolean numero = false;
        String var1 = "'%'";
        String nome = "'%'";
        String sobrenome = "'%'";
        String cpf = "'%'";

        System.out.println(c.getNumeroPescador());
        if (c.getNumeroPescador() > 0) {
            numero = true;
        }
        System.out.println(c.getNome());
        if (c.getNome().compareTo("") != 0) {
            nome = "'%" + c.getNome() + "%'";
        }
        System.out.println(c.getSobrenome());
        if ((c.getSobrenome().compareTo("") != 0)) {
            sobrenome = "'%" + c.getSobrenome() + "%'";
        }
        System.out.println(c.getCpf());
        if (c.getCpf().compareTo("") != 0) {
            cpf = "'" + c.getCpf() + "'";
        }

        //adicionar os outros campos desejados
        if (numero) {

            try {
                String sql = "SELECT * from vw_clientes where Numero_do_Pescador = " + c.getNumeroPescador();
//                    String sql = "SELECT * from clientes";
                System.out.println(sql);
                stmt = connection.prepareStatement(sql);
                rs = stmt.executeQuery();

                Cliente cli = new Cliente();

                if (rs.next()) {
                    for (int i = 1; i < rs.getMetaData().getColumnCount(); i++) {
                        String coluna = rs.getMetaData().getColumnName(i);
                        Object valor = rs.getObject(i);
                        cli.setData(coluna, valor);
                    }
                    cli.setFlagClienteNaoEncontrado(false);
                }
                return cli;

            } catch (Exception e) {
                e.printStackTrace();
                c.setFlagClienteNaoEncontrado(true);
                return c;
            }
//setar os campos com o resultado da query
        } else {
            
            try {
                String sql = "SELECT * from vw_clientes where Nome like " +
                        nome + " AND sobrenome like " + sobrenome + " AND CPF like " + cpf;
                System.out.println(sql);
                stmt = connection.prepareStatement(sql);
                rs = stmt.executeQuery();
                final ArrayList <Cliente> cliente = new ArrayList<Cliente>();

                while (rs.next()) {
                    Cliente cli = new Cliente();
                    for (int i = 1; i <= rs.getMetaData().getColumnCount(); i++)
                        cli.setData(rs.getMetaData().getColumnName(i), rs.getObject(i));

                    cliente.add(cli);
                }
                
                if(cliente.size() == 0)
                {
                    c.setFlagClienteNaoEncontrado(true);
                    return c;
                }
                if(cliente.size() == 1){
                    cliente.get(0).setFlagClienteNaoEncontrado(false);
                    return cliente.get(0);
                }

                else {
                  c.setFlagClienteNaoEncontrado(false);
                  selPessoa wPesc = new selPessoa(cliente, msp);
                  return c;
                }
            } catch (Exception e) {
                e.printStackTrace();
                c.setFlagClienteNaoEncontrado(true);
                return c;
            }


            //if (rs.last())  //retornou apenas uma linha
//setar os campos com o resultado da query

//possui mais que uma linha

        }
    }
    public Cliente consultarClienteParaEditar(Cliente c, MenuCadastrarCliente mcc) throws SQLException {

        boolean numero = false;
        String var1 = "'%'";
        String nome = "'%'";
        String sobrenome = "'%'";
        String cpf = "'%'";

        System.out.println(c.getNumeroPescador());
        if (c.getNumeroPescador() > 0) {
            numero = true;
        }
        System.out.println(c.getNome());
        if (c.getNome().compareTo("") != 0) {
            nome = "'%" + c.getNome() + "%'";
        }
        System.out.println(c.getSobrenome());
        if ((c.getSobrenome().compareTo("") != 0)) {
            sobrenome = "'%" + c.getSobrenome() + "%'";
        }
        System.out.println(c.getCpf());
        if (c.getCpf().compareTo("") != 0) {
            cpf = "'" + c.getCpf() + "'";
        }

        //adicionar os outros campos desejados
        final ArrayList <Cliente> Cliente = new ArrayList<Cliente>();
        if (numero) {

            try {
                String sql = "SELECT * from vw_clientes where Numero_do_Pescador = " + c.getNumeroPescador();
//                    String sql = "SELECT * from clientes";
                System.out.println(sql);
                stmt = connection.prepareStatement(sql);
                rs = stmt.executeQuery();

                
                if (rs.next()) {
                    Cliente cli = new Cliente();
                    for (int i = 1; i < rs.getMetaData().getColumnCount(); i++) {
                        String coluna = rs.getMetaData().getColumnName(i);
                        Object valor = rs.getObject(i);
                        cli.setData(coluna, valor);
                    }
                    return cli;
                }

                else {
                    c.setFlagClienteNaoEncontrado(false);
                    return c;
                }
                
            } catch (Exception e) {
                e.printStackTrace();
                return c;
            }
//setar os campos com o resultado da query
        } else {

            try {
                String sql = "SELECT * from vw_clientes where Nome like " +
                        nome + " AND sobrenome like " + sobrenome + " AND CPF like " + cpf;
                System.out.println(sql);
                stmt = connection.prepareStatement(sql);
                rs = stmt.executeQuery();
                final ArrayList <Cliente> cliente = new ArrayList<Cliente>();

                while (rs.next()) {
                    Cliente cli = new Cliente();
                    for (int i = 1; i <= rs.getMetaData().getColumnCount(); i++){
                        cli.setData(rs.getMetaData().getColumnName(i), rs.getObject(i));
                    }
                    cliente.add(cli);
                }

                if(cliente.size() == 0)
                {
                    c.setFlagClienteNaoEncontrado(true);
                    return c;
                }
                if(cliente.size() == 1){
                    cliente.get(0).setFlagClienteNaoEncontrado(false);
                    return cliente.get(0);
                }

                else {
                  c.setFlagClienteNaoEncontrado(false);
                  selPessoa wPesc = new selPessoa(cliente, mcc);
                  return c;
                }
            } catch (Exception e) {
                e.printStackTrace();
                c.setFlagClienteNaoEncontrado(true);
                return c;
            }


            //if (rs.last())  //retornou apenas uma linha
//setar os campos com o resultado da query

//possui mais que uma linha

        }
    }

    public List <Map<String, ?>> doRawSql(String query) {
        try {
            System.out.println("Raw Sql:" + query);
            stmt = connection.prepareStatement(query);
            stmt.execute();
            return resultSetToList(stmt.getResultSet());

        } catch (SQLException ex) {
            Logger.getLogger(Conector.class.getName()).log(Level.SEVERE, null, ex);
        }
              //   sql2array = resultSetToList(statement.getResultSet());
        return null;
    }

    public static void setCliente(Cliente clienteSelecionado) {
        retCliente = clienteSelecionado;
    }

    public boolean atualizarCadastroCliente(Cliente c) throws SQLException {

        try {

            System.out.println(c.getNumeroPescador());

            String sql = "UPDATE clientes SET cpf =  '" + c.getCpf() + "',  sobrenome = '" + c.getSobrenome() + "',  apelido = '" + c.getApelido() + "', Data_Nascimento = " + c.getDataNascimentoSql() + ", rg = '" + c.getRg() + "', sexo = '" + c.getSexo() + "', Logradouro = '" + c.getLogradouro() + "', Numero = '" + c.getNumero() + "', Bairro = '" + c.getBairro() + "', CEP = '" + c.getCep() + "', Email = '" + c.getEmail() + "', Cidade = '" + c.getCidade() + "', Telefone = '" + c.getTelefone() + "', Celular = '" + c.getCelular() + "', Estado = '" + c.getEstado() + "', Peixe_Preferido = '" + c.getPeixePreferido() + "', Observacao = '" + c.getObsevacao() +
                    "' where Numero_do_Pescador = " + c.getNumeroPescador();
            System.out.println(sql);
            stmt = connection.prepareStatement(sql);
            stmt.execute();
            return true;

        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }

    }

//        INSERT into teste values('Jamile', '22');
    public boolean cadastrarCliente(Cliente c) throws SQLException {

        try {
            /* String sql = "INSERT into clientes (cpf, nome, sobrenome, apelido, rg, Logradouro, " +
            "Numero, Bairro, Cidade, Estado, CEP, Telefone, Celular, Email, peixe_preferido, sexo, " +
            "Carteirinha, Observacao, Frequencia) values ( " + "'" + c.getCpf()+ "'" + " , " + "'" + c.getNome() + "'" + " , " +
            "'" + c.getSobrenome() + "'" + " , " + "'" + c.getApelido() + "'" + " , " + "'" + c.getRg() + "'" + " , " + "'" + c.getLogradouro() + "'" + " , " + "'" + c.getNumero() + "'" + " , " + "'" + c.getBairro() + "'" + " , " +
            "'" + c.getCidade() + "'" + " , " + "'" + c.getEstado()+ "'" + " , " + "'" + c.getCep()+ "'" + " , " + "'" + c.getTelefone() + "'" + " , " +
            "'" + c.getCelular() + "'" + " , " + "'" + c.getEmail()+ "'" + " , " + "'" + c.getPeixePreferido() + "'" + " , " + "'" + c.getSexo() + "'" + " , "
            + "'" + c.getCarteirinha() + "'" + " , " + "'" + c.getObsevacao() + "', 1 )";*/
//             String sql = "SELECT * from CLIENTES";
            if(c == null)
                return false;
            String sql = c.getInsertSql();
            if(sql == null)
                return false;
            System.out.println(sql);
            stmt = connection.prepareStatement(sql);
            stmt.execute();
            //rs = stmt.executeQuery()
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    public boolean verificaFuncionarioCadastrado(String cpf) {
        try {
            String sql = "SELECT * from funcionarios where cpf like '" + cpf + "'";
            System.out.println(sql);
            stmt = connection.prepareStatement(sql);
            stmt.execute();
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }
    public boolean cadastrarFuncionario(Funcionario f) throws SQLException {

         try {
            /* String sql = "INSERT into clientes (cpf, nome, sobrenome, apelido, rg, Logradouro, " +
            "Numero, Bairro, Cidade, Estado, CEP, Telefone, Celular, Email, peixe_preferido, sexo, " +
            "Carteirinha, Observacao, Frequencia) values ( " + "'" + c.getCpf()+ "'" + " , " + "'" + c.getNome() + "'" + " , " +
            "'" + c.getSobrenome() + "'" + " , " + "'" + c.getApelido() + "'" + " , " + "'" + c.getRg() + "'" + " , " + "'" + c.getLogradouro() + "'" + " , " + "'" + c.getNumero() + "'" + " , " + "'" + c.getBairro() + "'" + " , " +
            "'" + c.getCidade() + "'" + " , " + "'" + c.getEstado()+ "'" + " , " + "'" + c.getCep()+ "'" + " , " + "'" + c.getTelefone() + "'" + " , " +
            "'" + c.getCelular() + "'" + " , " + "'" + c.getEmail()+ "'" + " , " + "'" + c.getPeixePreferido() + "'" + " , " + "'" + c.getSexo() + "'" + " , "
            + "'" + c.getCarteirinha() + "'" + " , " + "'" + c.getObsevacao() + "', 1 )";*/
             if(f == null)
                return false;

            String sql = f.getInsertSql();
            if(sql == null)
                return false;
            System.out.println(sql);
            stmt = connection.prepareStatement(sql);
            stmt.execute();
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

//      public void cadastrarFuncionario(String cpf, String nome, String sobrenome, String logradouro, String numero, String bairro,
//  String cidade, String estado, String cep, String telefone, String celular, String senha, String apelido,
//  String dataNascimento, String sexo, String rg) throws SQLException {
//            String sql = "INSERT into clientes values (cpf =  " + cpf + " sobrenome = " + sobrenome + " apelido = " + apelido +
//                    " Data_de_Nascimento = " + dataNascimento + " rg = " + rg + " sexo = " + sexo + " Logradouro = " + logradouro +
//                    " Numero = " + numero + " Bairro = " + bairro + " CEP = " + cep + " Cidade = " + cidade +
//                    " Telefone = " + telefone + "Celular = " + celular + " Estado = " + estado + ")";
//                    stmt = connection.prepareStatement(sql);
//                    rs = stmt.executeQuery();
//
//        }
    //arrumar a query com os campos necessários

    public Funcionario consultarFuncionarioParaEditar(Funcionario f, MenuCadastrarFuncionario mcf) throws SQLException {
        boolean numero = false;
        String nome = "'%'";
        String sobrenome = "'%'";
        String cpf = "'%'";
        String apelido = "'%'";

        if (f.getNome().compareTo("") != 0) {
            nome = "'%" + f.getNome() + "%'";
        }
        if ((f.getSobrenome().compareTo("") != 0)) {
            sobrenome = "'%" + f.getSobrenome() + "%'";
        }
        if (f.getCpf().compareTo("") != 0) {
            cpf = "'" + f.getCpf() + "'";
        }
        if (f.getApelido().compareTo("") != 0) {
            apelido = "'%" + f.getApelido() + "%'";
        }

        try {

//            String sql = "INSERT into clientes values (cpf =  " + cpf + " sobrenome = " + sobrenome + " apelido = " + apelido +
//                    " Data_de_Nascimento = " + dataNascimento + " rg = " + rg + " sexo = " + sexo + " Logradouro = " + logradouro +
//                    " Numero = " + numero + " Bairro = " + bairro + " CEP = " + cep + " Cidade = " + cidade +
//                    " Telefone = " + telefone + "Celular = " + celular + " Estado = " + estado + ")";
//                    stmt = connection.prepareStatement(sql);
//                    rs = stmt.executeQuery();


            String sql = "SELECT * from funcionarios where Nome like " +
                        nome + " AND sobrenome like " + sobrenome + " AND CPF like " + cpf + " AND apelido like " + apelido;
                System.out.println(sql);
                stmt = connection.prepareStatement(sql);
                rs = stmt.executeQuery();
                final ArrayList <Funcionario> Funcionario = new ArrayList<Funcionario>();
               while (rs.next()) {
                    Funcionario func = new Funcionario();
                    for (int i = 1; i <= rs.getMetaData().getColumnCount(); i++) {
                        if (rs.getMetaData().getColumnName(i).equals("SENHA"))
                            continue;   // retira senha no momento de popular dados do funcionario
                        func.setData(rs.getMetaData().getColumnName(i), rs.getObject(i));

                    }
                    Funcionario.add(func);
                }
                if(Funcionario.size() == 0)
                {
                    f.setFlagFuncionarioNaoCadastrado(true);
                    return f;
                }
                if(Funcionario.size() == 1){
                    return Funcionario.get(0);
                }

                else {
                  selPessoa wFunc = new selPessoa(Funcionario, mcf);
                  return f;
                }

            } catch (Exception e) {
                e.printStackTrace();
                return null;
            }
        }
    public boolean atualizarCadastroFuncionario(Funcionario f) throws SQLException {
        try {

//           String sql = "UPDATE funcionarios SET cpf =  '" + f.getCpf() + "',  sobrenome = '" + f.getSobrenome() +
//                   "',  apelido = '" + f.getApelido() + "', Data_Nascimento = " + f.getDataNascimentoSql() + ", rg = '"
//                   + f.getRg() + "', sexo = '" + f.getSexo() + "', Logradouro = '" + f.getLogradouro() + "', Numero = '"
//                   + f.getNumero() + "', Bairro = '" + f.getBairro() + "', CEP = '" + f.getCep() + "', Cidade = '" +
//                   f.getCidade() + "', Telefone = '" + f.getTelefone() + "', Celular = '" + f.getCelular() +
//                   "', Estado = '" + f.getEstado() + "' where apelido = " + f.getApelido();
            String sql = f.getUpdateSql("CPF = '" + f.getCpf() + "'");
            System.out.println(sql);
            stmt = connection.prepareStatement(sql);
            stmt.execute();
            return true;

        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }

}
     public Pesqueiro consultarDadosPequeiro() throws SQLException {
        try {
                String sql = "SELECT * from pesqueiros where RP = " + 1;
//                System.out.println(sql);
                stmt = connection.prepareStatement(sql);
                rs = stmt.executeQuery();
                Pesqueiro pesq = new Pesqueiro();
                if (rs.next()) {
                    for (int i = 1; i <= rs.getMetaData().getColumnCount(); i++) {
                        pesq.setData(rs.getMetaData().getColumnName(i), rs.getObject(i));
                        System.out.println(rs.getMetaData().getColumnName(i) + " VALOR: " + rs.getObject(i));
                    }
                }

                return pesq;
               } catch (Exception e) {
                e.printStackTrace();
                return null;
            }
    }
    public boolean atualizarDadosPesqueiro(Pesqueiro p) throws SQLException {
        try {
             String sql = "UPDATE pesqueiros SET Nome =  '" + p.getNome() + "',  Logradouro = '" + p.getLogradouro() + "', Numero = '"
                   + p.getNumero() + "', Bairro = '" + p.getBairro() + "', CEP = '" + p.getCep() + "', Cidade = '" +
                   p.getCidade() + "', Telefone = '" + p.getTelefone() + "', Estado = '" + p.getEstado() + "' where RP = " + 1;
            System.out.println(sql);
            stmt = connection.prepareStatement(sql);
            stmt.execute();
            return true;

        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }

}
        public boolean cadastrarServicoPesca(ServicoPesca s) throws SQLException {

         try {

             if(s == null)
                return false;

            String sql = s.getInsertSql();
            System.out.println(sql);
            stmt = connection.prepareStatement(sql);
            stmt.execute();
            return true;
            
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

        public boolean atualizarCadastroServicoPesca(ServicoPesca s, Integer numero) throws SQLException {

        try {

             if(s == null)
                return false;

            String sql = s.getUpdateSql() + numero;
            System.out.println(sql);
            stmt = connection.prepareStatement(sql);
            stmt.executeUpdate();
            return true;

        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }
    public boolean consultarServicoPescaCadastrado(ServicoPesca s) throws SQLException {
        try {
                String sql = s.getSelectSql();
                System.out.println(sql);
                stmt = connection.prepareStatement(sql);
                rs = stmt.executeQuery();
                if (rs.next())
                    return true;
                else
                    return false;

        } catch (Exception e) {
            e.printStackTrace();
            return false;
         }
    }
    
    public boolean cadastrarServicoPiscina(ServicoPiscina p) throws SQLException {
        try {

             if(p == null)
                return false;

            String sql = p.getInsertSql();
            System.out.println(sql);
            stmt = connection.prepareStatement(sql);
            stmt.execute();
            return true;

        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

     public boolean atualizaServicoPiscina(ServicoPiscina p, Integer numero) throws SQLException {
        try {
            if(p == null)
                return false;
            String sql = p.getUpdateSql() + numero;
            System.out.println(sql);
            stmt = connection.prepareStatement(sql);
            stmt.executeUpdate();
            return true;

        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    public float consultarValorServicoPesca(String tipo, String turno, String periodo) throws SQLException {
        try {
                String sql = "SELECT valor from servicos_disponiveis_pesca where tipo like '" + tipo + "' AND turno like '%" +
                        turno + "' AND periodo like '" + periodo + "'";
                System.out.println(sql);
                stmt = connection.prepareStatement(sql);
                rs = stmt.executeQuery();
                if (rs.next()) {
                    System.out.println();
                    System.out.println("VALOR: " + rs.getObject("valor"));
                    return Float.parseFloat(String.valueOf(rs.getObject("valor")));
                }
                else
                    return (float) 0.00;

        } catch (Exception e) {
            e.printStackTrace();
            return (float) 0.00;
         }
    }

    public boolean consultaCadastroServicoPesca(String turno, String periodo) throws SQLException {
        try {
            System.out.println(turno + "," + periodo);
            String sql = "SELECT * from servicos_disponiveis_pesca where turno like '%" +
                        turno + "' AND periodo like '" + periodo + "'";
                System.out.println(sql);
                stmt = connection.prepareStatement(sql);
                rs = stmt.executeQuery();
                if (rs.next()) {
                    return true;
                }
                else
                    return false;

        } catch (Exception e) {
            e.printStackTrace();
            return false;
         }
    }

    public boolean insereServicoPesca(String turno, String periodo, int qtde, float valor, int numPesq) {

        String sql = "INSERT into servicos_realizados_pesca (turno, periodo, quantidade, valor, num_pesq) " +
                "values ( '" + turno + "', '" + periodo + "', " + qtde + ", " + valor + ", " + numPesq + " )";
        try {
            System.out.println(sql);
            stmt = connection.prepareStatement(sql);
            stmt.executeUpdate();
            return true;
        } catch (SQLException ex) {
            Logger.getLogger(Conector.class.getName()).log(Level.SEVERE, null, ex);
            return false;
        }
    }
    public boolean excluirCadastroFuncionario(String cpf) {
        String sql = "DELETE FROM funcionarios where cpf like '" + cpf + "'";
        try {
            stmt = connection.prepareStatement(sql);
            stmt.execute();
            return true;
        } catch (SQLException ex) {
            Logger.getLogger(Conector.class.getName()).log(Level.SEVERE, null, ex);
            return false;
        }
    }
        public boolean consultarServicoPiscinaCadastrado(ServicoPiscina p) throws SQLException {
        try {
                String sql = p.getSelectSql();
                System.out.println(sql);
                stmt = connection.prepareStatement(sql);
                rs = stmt.executeQuery();
                if (rs.next())
                    return true;
                else
                    return false;

        } catch (Exception e) {
            e.printStackTrace();
            return false;
         }
    }

        public boolean cadastraCompraPeixes(String tabela, String especie, float quantidade, float valor) throws SQLException {

            String sql = "INSERT into " + tabela + " (especie, quantidade, valor) values ( '" + especie + "', " + quantidade + ", " + valor + ")";
            System.out.println(sql);

            try {

                stmt = connection.prepareStatement(sql);
                stmt.execute();
                return true;

        } catch (SQLException ex) {
                Logger.getLogger(Conector.class.getName()).log(Level.SEVERE, null, ex);
                return false;
        }
    }

    protected List<Map<String, ?>> resultSetToList(ResultSet resultset)
        throws SQLException {
                List<Map<String, ?>> sql2array = new ArrayList<Map<String, ?>>(resultset.getFetchSize());

                ResultSetMetaData rsmd = resultset.getMetaData();
                // get column names to build criteria
                String[] columnname = new String[rsmd.getColumnCount()];
                for (int i = 0; i < columnname.length; i++) {
                        columnname[i]=rsmd.getColumnName(i+1);
                }
                // builds arraylist
                while (resultset.next()) {
                        // first build criteria
                        Map<String, Object> tmpcriteria = new LinkedHashMap<String, Object>(columnname.length);
                        for (int i = 0; i < columnname.length ; i++) {
                                tmpcriteria.put(columnname[i],
                                                //getObject(resultset.getObject(i+1),
                                                //      rsmd.getColumnType(i+1)) );
                                                resultset.getObject(i+1));
                        }
                        sql2array.add(tmpcriteria);
                }
                return sql2array;
        }

    public boolean removerServicoPesca(Integer num) {
        String sql = "DELETE FROM servicos_disponiveis_pesca where NUMERO_SERVICO = " + num.toString();
        try {
            stmt = connection.prepareStatement(sql);
            stmt.execute();
            return true;
        } catch (SQLException ex) {
            Logger.getLogger(Conector.class.getName()).log(Level.SEVERE, null, ex);
            return false;
        }
    }

    public boolean removerServicoPiscina(Integer num) {
        String sql = "DELETE FROM servicos_disponiveis_piscina where NUMERO_SERVICO = " + num.toString();
        try {
            stmt = connection.prepareStatement(sql);
            stmt.execute();
            return true;
        } catch (SQLException ex) {
            Logger.getLogger(Conector.class.getName()).log(Level.SEVERE, null, ex);
            return false;
        }
    }

    public float pegaValorPeixePiscina(Integer NUMERO_SERVICO) {
        String sql = "SELECT VALOR FROM servicos_disponiveis_piscina where NUMERO_SERVICO = " + NUMERO_SERVICO.toString();
        try {
            stmt = connection.prepareStatement(sql);
            rs = stmt.executeQuery();
            if (rs.next()) {
                System.out.println();
                System.out.println("VALOR: " + rs.getObject("VALOR"));
                return Float.parseFloat(String.valueOf(rs.getObject("VALOR")));
            }
            else
                return 0.00f;
         } catch (Exception e) {
            e.printStackTrace();
            return (float) 0.00;
         }
    }

    public boolean cadastrarCompraPeixePiscina(float valor, float peso, Map<String, ?> servico) {
            String tabela = "SERVICOS_REALIZADOS_PISCINA";
            String sql = "INSERT into " + tabela + " (especie, servico, peso,valor) values ( '" +
                    servico.get("ESPECIE") + "', '" + servico.get("SERVICO") + "', " + peso + ", " + valor + " )";
            System.out.println(sql);

            try {

                stmt = connection.prepareStatement(sql);
                stmt.execute();
                return true;

        } catch (SQLException ex) {
                Logger.getLogger(Conector.class.getName()).log(Level.SEVERE, null, ex);
                return false;
        }
    }

    public String[][] balanco(String dataInicio, String dataFim) {
        ArrayList<String> consultas = new ArrayList<String>();
        //'table' as tablo, srp.*
        consultas.add("SELECT 'Servico Pesca' AS TABELA, SUM(SRP.VALOR) AS VALOR_TOTAL, SUM(SRP.QUANTIDADE) AS QUANTIDADE FROM SERVICOS_REALIZADOS_PESCA SRP ");
        consultas.add("SELECT 'Servico Piscina' AS TABELA, SUM(SRPIS.VALOR) AS VTPISCINA, SUM(SRPIS.PESO) AS QTPISCINA FROM SERVICOS_REALIZADOS_PISCINA SRPIS ");
        consultas.add("SELECT 'Compra Tanque' AS TABELA, SUM(T.VALOR) AS VTTANQUE, SUM(T.QUANTIDADE) AS QTTANQUE FROM TANQUE T ");
        consultas.add("SELECT 'Compra Piscina' AS TABELA, SUM(P.VALOR) AS VTCOMPRAPISCINA, SUM(P.QUANTIDADE) AS QTCOMPRAPISCINA FROM PISCINA P ");

        List<Map<String,?>> lista = new ArrayList<Map<String,?>>();

        for (String sql : consultas) {
            lista.addAll(listarItens(sql, dataInicio, dataFim));

        }
        System.out.println(lista);
        return getListData(lista);
    }

    public String[][] pescadoresTanque(String dataInicio, String dataFim) {
        String sql = "SELECT SRP.HORARIO, SRP.NUM_PESQ, CLI.NOME, CLI.SOBRENOME, SRP.TURNO, SRP.PERIODO, SRP.QUANTIDADE, SRP.VALOR FROM SERVICOS_REALIZADOS_PESCA SRP RIGHT JOIN CLIENTES CLI ON SRP.NUM_PESQ = CLI.NUMERO_DO_PESCADOR ";          
        List<Map<String,?>> lista = listarItens(sql, dataInicio, dataFim);
        System.out.println(lista.toString());
        return getListData(lista);
    }

    public String[][] comprasTanque(String dataInicio, String dataFim) {
        String sql = "SELECT * FROM TANQUE ";        
        List<Map<String,?>> lista = listarItens(sql, dataInicio, dataFim);
        System.out.println(lista.toString());
        return getListData(lista);

    }
    public String[][] comprasTotalTanque(String dataInicio, String dataFim) {
        String sql = "SELECT SUM(VALOR) AS TOTAL_TANQUE FROM TANQUE ";
        List<Map<String,?>> lista = listarItens(sql, dataInicio, dataFim);
        System.out.println(lista.toString());
        return getListData(lista);

    }
    public String[][] comprasPiscina(String dataInicio, String dataFim) {
        String sql = "select * from piscina ";
        List<Map<String,?>> lista = listarItens(sql, dataInicio, dataFim);
        System.out.println(lista.toString());
        return getListData(lista);
    }

    public String[][] relatServicosPesca(String dataInicio, String dataFim) {
        String sql = "select * from servicos_realizados_pesca srp ";
        List<Map<String,?>> lista = listarItens(sql, dataInicio, dataFim);
        System.out.println(lista.toString());
        return getListData(lista);
    }

    public String[][] relatServicosPiscina(String dataInicio, String dataFim) {
        String sql = "select * from servicos_realizados_piscina srpis ";
        List<Map<String,?>> lista = listarItens(sql, dataInicio, dataFim);
        System.out.println(lista.toString());
        return getListData(lista);
    }


    private String[][] getListData(List<Map<String,?>> lista){
        String[][] dados = null;
        System.out.flush();
        int line = 0;
        int col = 0 ;
            if (dados == null){
                dados = new String[lista.size() + 1][lista.get(0).size()];
            }

        for (String campo : lista.get(0).keySet()){
            dados[line][col++] = campo;
        }

        line = 1;
        col = 0 ;

        for(Map<String,?> m : lista){
            //System.out.println(m);

            for(String key : m.keySet()){
                //System.out.println(key + ":" + m.get(key) + ":" + line + ":" + col);
                dados[line][col++] = m.get(key) != null ? m.get(key).toString() : "";
            }
            line++;
            col=0;
        }

        return dados;
    }


    private List<Map<String,?>> listarItens(String sql, String dataInicio, String dataFim){

        try {
            SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
            Date inicio = null;
            Date fim = null;

            try {
                inicio = sdf.parse(dataInicio);
            } catch (ParseException ex) {
                // caso a data de inicio nao exista coloca todos
            }
            try {
                fim = sdf.parse(dataFim);
            } catch (ParseException ex) {
                fim = new Date(System.currentTimeMillis());
            }
            if (inicio != null) {
                sql +=  "WHERE HORARIO BETWEEN ? AND ?";
                stmt = connection.prepareStatement(sql);
                stmt.setDate(1, new java.sql.Date(inicio.getTime()));
                stmt.setObject(2, new java.sql.Date(fim.getTime()));
            } else {
                stmt = connection.prepareStatement(sql);
            }
            System.out.println("Data Inicio: " + inicio + " Data fim: " + fim + " Sql: " + sql);
            stmt.execute();
            return resultSetToList(stmt.getResultSet());
        } catch (SQLException ex) {
            Logger.getLogger(Conector.class.getName()).log(Level.SEVERE, null, ex);
            return null;
        }
    }

    public boolean verificaClienteCadastrado(String cpf) {

        try {

            String sql = "SELECT * from clientes where cpf like '" + cpf + "'";
            System.out.println(sql);
            stmt = connection.prepareStatement(sql);
            stmt.execute();
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }

    }
}